Jeste problem s thready
Otázka od: tomsir1.edu@mail.cez.cz
25. 8. 2004 9:32
Ahoj,
navazu na muj predchozi dotaz ... ted mam funkcni WaitForMultipleObjects ..
a vytvarim nejake thready. V nich potom oteviram TCP spojeni a udalosti
jako napr. chyby posilam v metode Synchronize do Mema na hlavnim formulari
...
Problem nastal v tom, ze kdyz za behu threadu uzavru aplikaci, vyskoci mi
Acces Violation s tim, ze dochazi k zapisu do nepovolene pameti. Prisel
jsem na to, ze pote co v OnCloseQuery hl. formu zavolam Terminate tech
threadu, dojde jeste k volani Synchronize
Jak mam zabezpecit, aby pred nastavenim CanClose = true byly opravdu
vsechny thready ukonceny ??
Diky Radek
Odpovedá: Ales Vasicek
25. 8. 2004 9:45
Ahoj,
zkus volat jeste Thread.WaitFor; napr:
MujThread.Terminate;
MujThread.WaitFor;
MujThread.Free;
Ales
> -----Original Message-----
> From: tomsir1.edu@mail.cez.cz [mailto:tomsir1.edu@mail.cez.cz]
> ...
> Problem nastal v tom, ze kdyz za behu threadu uzavru
> aplikaci, vyskoci mi
> Acces Violation s tim, ze dochazi k zapisu do nepovolene
> pameti. Prisel
> jsem na to, ze pote co v OnCloseQuery hl. formu zavolam Terminate tech
> threadu, dojde jeste k volani Synchronize
>
> Jak mam zabezpecit, aby pred nastavenim CanClose = true byly opravdu
> vsechny thready ukonceny ??
Odpovedá: Slavomir Skopalik
25. 8. 2004 10:01
Zrejme pouzivas free on terminate -> thread se sam zrusi pri ukonceni.
Mas dve moznosti:
1. zakazat volani synchronize po zavolani teminate
2. pouzit WaitFor (vypnout free on terminate) funkci, ktera pocka, nez
je thread ukoncen.
Slavek
>
> navazu na muj predchozi dotaz ... ted mam funkcni
> WaitForMultipleObjects .. a vytvarim nejake thready. V nich
> potom oteviram TCP spojeni a udalosti jako napr. chyby
> posilam v metode Synchronize do Mema na hlavnim formulari ...
> Problem nastal v tom, ze kdyz za behu threadu uzavru
> aplikaci, vyskoci mi Acces Violation s tim, ze dochazi k
> zapisu do nepovolene pameti. Prisel jsem na to, ze pote co v
> OnCloseQuery hl. formu zavolam Terminate tech threadu, dojde
> jeste k volani Synchronize
>
> Jak mam zabezpecit, aby pred nastavenim CanClose = true byly
> opravdu vsechny thready ukonceny ??
>
Odpovedá: Petr Vones
25. 8. 2004 10:09
From: <tomsir1.edu@mail.cez.cz>
> Jak mam zabezpecit, aby pred nastavenim CanClose = true byly opravdu
> vsechny thready ukonceny ??
V zasade musis volat sekvenci:
Terminate
WaitFor
Pricemz jejich podoba uz zavisi na konkretni implementaci (napriklad Terminate
nastavi nejdeiv priznak Terminated a pak event na ktery se ceka v threadu,
nebo samostatny event ktery indikuje pozadavek ukonceni threadu apod.)
Petr Vones
Odpovedá: Vaclav Sazima
25. 8. 2004 11:02
Ahoj,
ja to resim tak, ze si jeste vytvorim dalsi event a kdyz chci thread
ukoncit, tak ji (ho,to?) nastavim, tim dosahnu ukonceni
WaitForMultipleObjects a nasledni i normalniho ukonceni metody execute
thredu.
Vaclav Sazima
tomsir1.edu@mail.cez.cz wrote:
>... ted mam funkcni WaitForMultipleObjects ..
> Problem nastal v tom, ze kdyz za behu threadu uzavru aplikaci, vyskoci mi
> Acces Violation s tim, ze dochazi k zapisu do nepovolene pameti. Prisel
> jsem na to, ze pote co v OnCloseQuery hl. formu zavolam Terminate tech
> threadu, dojde jeste k volani Synchronize
>
> Jak mam zabezpecit, aby pred nastavenim CanClose = true byly opravdu
> vsechny thready ukonceny ??
>
> Diky Radek